Micron Document
🎖️GitЯра🎖️

Commit e330442dd5415dc7eb2bff4e3a3f1599c18022a1


Parents : 1fdc921
Author : James Rich <2199651+jamesarich@users.noreply.github.com>
Signature : Signature validation error
Date : 2026-08-13T15:56:40Z
Committer : GitHub <noreply@github.com>
Date : 2026-08-13T15:56:40Z

feat(node): surface incomplete nodes with a badge and show them by default (#6673)

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

Changes

19 files changed, 142 insertions(+), 6 deletions(-)


Diff

diff --git a/.skills/compose-ui/strings-index.txt b/.skills/compose-ui/strings-index.txt
index 44874dfd48..87a783cada 100644
--- a/.skills/compose-ui/strings-index.txt
+++ b/.skills/compose-ui/strings-index.txt
@@ -1196,6 +1196,8 @@ node_filter_placeholder
node_filter_show_ignored
node_filter_title
node_id
+node_incomplete
+node_incomplete_description
node_layout_channel
node_layout_compact
node_layout_compact_fields_header

diff --git a/core/prefs/src/commonMain/kotlin/org/meshtastic/core/prefs/ui/UiPrefsImpl.kt b/core/prefs/src/commonMain/kotlin/org/meshtastic/core/prefs/ui/UiPrefsImpl.kt
index 26dacf2a74..066445f9c9 100644
--- a/core/prefs/src/commonMain/kotlin/org/meshtastic/core/prefs/ui/UiPrefsImpl.kt
+++ b/core/prefs/src/commonMain/kotlin/org/meshtastic/core/prefs/ui/UiPrefsImpl.kt
@@ -73,8 +73,9 @@ class UiPrefsImpl(private val dataStore: UiDataStore, dispatchers: CoroutineDisp
scope.launch { dataStore.edit { it[KEY_NODE_SORT] = value } }
}
+ // Defaults on so nodes heard before their NodeInfo arrives stay visible and messageable (design#16).
override val includeUnknown: StateFlow<Boolean> =
- dataStore.data.map { it[KEY_INCLUDE_UNKNOWN] ?: false }.stateIn(scope, SharingStarted.Lazily, false)
+ dataStore.data.map { it[KEY_INCLUDE_UNKNOWN] ?: true }.stateIn(scope, SharingStarted.Lazily, true)
override fun setIncludeUnknown(value: Boolean) {
scope.launch { dataStore.edit { it[KEY_INCLUDE_UNKNOWN] = value } }

diff --git a/core/resources/src/commonMain/composeResources/drawable/ic_person_question.xml b/core/resources/src/commonMain/composeResources/drawable/ic_person_question.xml
new file mode 100644
index 0000000000..174765cc11
--- /dev/null
+++ b/core/resources/src/commonMain/composeResources/drawable/ic_person_question.xml
@@ -0,0 +1,16 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="960"
+ android:viewportHeight="960">
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M360,480Q294,480 247,433Q200,386 200,320Q200,254 247,207Q294,160 360,160Q426,160 473,207Q520,254 520,320Q520,386 473,433Q426,480 360,480ZM40,720L40,688Q40,654 57.5,625.5Q75,597 104,582Q166,551 230,535.5Q294,520 360,520Q426,520 490,535.5Q554,551 616,582Q645,597 662.5,625.5Q680,654 680,688L680,720Q680,753 656.5,776.5Q633,800 600,800L120,800Q87,800 63.5,776.5Q40,753 40,720Z"/>
+ <group
+ android:translateX="78"
+ android:translateY="-320">
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M680,606Q668,606 658.5,611.5Q649,617 642,626Q636,634 627,637Q618,640 610,636Q601,632 596.5,623Q592,614 597,606Q610,585 632,572.5Q654,560 680,560Q717,560 744.5,584Q772,608 772,644Q772,655 769,664.5Q766,674 760,682Q749,698 734,710.5Q719,723 710,740Q710,741 705,754Q703,764 696.5,771Q690,778 680,778Q669,778 662,770.5Q655,763 656,753Q657,745 658.5,738.5Q660,732 664,725Q674,708 689.5,696Q705,684 716,668Q719,664 723,645Q723,628 710,617Q697,606 680,606ZM680,880Q666,880 656,870.5Q646,861 646,847Q646,833 656,823Q666,813 680,813Q694,813 703.5,823Q713,833 713,847Q713,861 703.5,870.5Q694,880 680,880Z"/>
+ </group>
+</vector>

diff --git a/core/resources/src/commonMain/composeResources/values/strings.xml b/core/resources/src/commonMain/composeResources/values/strings.xml
index d4d4c6bbbd..5ad9df2224 100644
--- a/core/resources/src/commonMain/composeResources/values/strings.xml
+++ b/core/resources/src/commonMain/composeResources/values/strings.xml
@@ -1229,6 +1229,8 @@
<string name="node_filter_show_ignored">Only show ignored Nodes</string>
<string name="node_filter_title">Filter by</string>
<string name="node_id">Node ID</string>
+ <string name="node_incomplete">Incomplete</string>
+ <string name="node_incomplete_description">Node info has not been received yet</string>
<string name="node_layout_channel">Channel</string>
<string name="node_layout_compact">Compact</string>
<string name="node_layout_compact_fields_header">Compact Fields</string>

diff --git a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/BuildNodeDescription.kt b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/BuildNodeDescription.kt
index 8905be8902..eacf391962 100644
--- a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/BuildNodeDescription.kt
+++ b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/BuildNodeDescription.kt
@@ -30,6 +30,7 @@ import org.meshtastic.core.resources.a11y_node_offline
import org.meshtastic.core.resources.a11y_node_online
import org.meshtastic.core.resources.a11y_node_role
import org.meshtastic.core.resources.a11y_node_signal
+import org.meshtastic.core.resources.node_incomplete
import org.meshtastic.core.resources.now
import org.meshtastic.core.resources.unknown
import org.meshtastic.core.ui.util.formatAgo
@@ -52,6 +53,7 @@ internal data class NodeDescriptionStrings(
val signal: String,
val unknown: String,
val now: String,
+ val incomplete: String,
)
/** Resolves [NodeDescriptionStrings] from Compose string resources. */
@@ -68,6 +70,7 @@ internal fun rememberNodeDescriptionStrings(): NodeDescriptionStrings = NodeDesc
signal = stringResource(Res.string.a11y_node_signal, "%s"),
unknown = stringResource(Res.string.unknown),
now = stringResource(Res.string.now),
+ incomplete = stringResource(Res.string.node_incomplete),
)
/** Builds a TalkBack-friendly description aggregating node state. Shared between [NodeItem] and [NodeItemCompact]. */
@@ -86,8 +89,13 @@ internal fun buildNodeDescription(
strings: NodeDescriptionStrings,
lastHeardIsRelative: Boolean = true,
modemPreset: ModemPreset? = null,
+ isUnknownUser: Boolean = false,
): String = buildString {
append(name)
+ if (isUnknownUser) {
+ append(", ")
+ append(strings.incomplete)
+ }
append(", ")
append(if (isOnline) strings.online else strings.offline)
if (isFavorite) {

diff --git a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/NodeItem.kt b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/NodeItem.kt
index 41577b3a9f..755e8780c1 100644
--- a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/NodeItem.kt
+++ b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/NodeItem.kt
@@ -149,6 +149,7 @@ fun NodeItem(
viaMqtt = thatNode.viaMqtt,
strings = a11yStrings,
modemPreset = modemPreset,
+ isUnknownUser = thatNode.isUnknownUser,
)
}
@@ -546,6 +547,7 @@ private fun NodeItemHeader(
connectionState = connectionState,
deviceType = deviceType,
contentColor = contentColor,
+ isUnknownUser = thatNode.isUnknownUser,
)
}
}

diff --git a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/NodeItemCompact.kt b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/NodeItemCompact.kt
index bec0f1458d..5d002ef429 100644
--- a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/NodeItemCompact.kt
+++ b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/NodeItemCompact.kt
@@ -60,6 +60,7 @@ import org.meshtastic.core.model.util.toDistanceString
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.distance
import org.meshtastic.core.resources.ic_memory
+import org.meshtastic.core.resources.node_incomplete
import org.meshtastic.core.resources.node_list_click_label
import org.meshtastic.core.resources.node_list_long_click_label
import org.meshtastic.core.resources.unknown_username
@@ -81,6 +82,7 @@ import org.meshtastic.core.ui.icon.Humidity
import org.meshtastic.core.ui.icon.MapCompass
import org.meshtastic.core.ui.icon.MeshtasticIcons
import org.meshtastic.core.ui.icon.MqttConnected
+import org.meshtastic.core.ui.icon.PersonQuestion
import org.meshtastic.core.ui.icon.Pressure
import org.meshtastic.core.ui.icon.Temperature
import org.meshtastic.core.ui.icon.Unmessageable
@@ -160,6 +162,7 @@ fun NodeItemCompact(
strings = a11yStrings,
lastHeardIsRelative = lastHeardIsRelative,
modemPreset = modemPreset,
+ isUnknownUser = thatNode.isUnknownUser,
)
}
@@ -274,6 +277,14 @@ private fun CompactNameRow(
overflow = TextOverflow.Ellipsis,
modifier = Modifier.weight(1f),
)
+ if (thatNode.isUnknownUser) {
+ Icon(
+ imageVector = MeshtasticIcons.PersonQuestion,
+ contentDescription = stringResource(Res.string.node_incomplete),
+ modifier = Modifier.size(18.dp),
+ tint = MaterialTheme.colorScheme.outline,
+ )
+ }
if (unmessageable) {
Icon(
imageVector = MeshtasticIcons.Unmessageable,

diff --git a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/NodeStatusIcons.kt b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/NodeStatusIcons.kt
index 56a5893ba8..64508e5483 100644
--- a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/NodeStatusIcons.kt
+++ b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/NodeStatusIcons.kt
@@ -45,10 +45,13 @@ import org.meshtastic.core.resources.device_sleeping
import org.meshtastic.core.resources.disconnected
import org.meshtastic.core.resources.favorite
import org.meshtastic.core.resources.mute_always
+import org.meshtastic.core.resources.node_incomplete
+import org.meshtastic.core.resources.node_incomplete_description
import org.meshtastic.core.resources.unmessageable
import org.meshtastic.core.resources.unmonitored_or_infrastructure
import org.meshtastic.core.ui.icon.Favorite
import org.meshtastic.core.ui.icon.MeshtasticIcons
+import org.meshtastic.core.ui.icon.PersonQuestion
import org.meshtastic.core.ui.icon.Unmessageable
import org.meshtastic.core.ui.icon.VolumeOff
import org.meshtastic.core.ui.theme.StatusColors.StatusYellow
@@ -65,8 +68,17 @@ fun NodeStatusIcons(
modifier: Modifier = Modifier,
deviceType: DeviceType? = null,
contentColor: Color = LocalContentColor.current,
+ isUnknownUser: Boolean = false,
) {
Row(modifier = modifier.padding(4.dp)) {
+ if (isUnknownUser) {
+ StatusBadge(
+ imageVector = MeshtasticIcons.PersonQuestion,
+ contentDescription = Res.string.node_incomplete,
+ tooltipText = Res.string.node_incomplete_description,
+ tint = contentColor,
+ )
+ }
if (isUnmessageable) {
StatusBadge(
imageVector = MeshtasticIcons.Unmessageable,

diff --git a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/preview/NodePreviewParameterProvider.kt b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/preview/NodePreviewParameterProvider.kt
index 83735f016a..8c69cfc4fd 100644
--- a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/preview/NodePreviewParameterProvider.kt
+++ b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/preview/NodePreviewParameterProvider.kt
@@ -113,7 +113,7 @@ class NodePreviewParameterProvider : PreviewParameterProvider<Node> {
hopsAway = 2,
)
- private val unknown =
+ val unknown =
donaldDuck.copy(
user =
User(id = "myId", long_name = "Meshtastic myId", short_name = "myId", hw_model = HardwareModel.UNSET),

diff --git a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/icon/Person.kt b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/icon/Person.kt
index a11166d49e..aea56c1a5f 100644
--- a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/icon/Person.kt
+++ b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/icon/Person.kt
@@ -26,10 +26,13 @@ import org.meshtastic.core.resources.ic_groups
import org.meshtastic.core.resources.ic_person
import org.meshtastic.core.resources.ic_person_add
import org.meshtastic.core.resources.ic_person_off
+import org.meshtastic.core.resources.ic_person_question
import org.meshtastic.core.resources.ic_person_search
val MeshtasticIcons.PersonOff: ImageVector
@Composable get() = vectorResource(Res.drawable.ic_person_off)
+val MeshtasticIcons.PersonQuestion: ImageVector
+ @Composable get() = vectorResource(Res.drawable.ic_person_question)
val MeshtasticIcons.Group: ImageVector
@Composable get() = vectorResource(Res.drawable.ic_group)
val MeshtasticIcons.AccountCircle: ImageVector

diff --git a/core/ui/src/commonTest/kotlin/org/meshtastic/core/ui/component/BuildNodeDescriptionTest.kt b/core/ui/src/commonTest/kotlin/org/meshtastic/core/ui/component/BuildNodeDescriptionTest.kt
index 9e46266465..9ba609691b 100644
--- a/core/ui/src/commonTest/kotlin/org/meshtastic/core/ui/component/BuildNodeDescriptionTest.kt
+++ b/core/ui/src/commonTest/kotlin/org/meshtastic/core/ui/component/BuildNodeDescriptionTest.kt
@@ -37,6 +37,7 @@ class BuildNodeDescriptionTest {
signal = "signal %s",
unknown = "unknown",
now = "now",
+ incomplete = "incomplete",
)
private fun describe(
@@ -51,6 +52,7 @@ class BuildNodeDescriptionTest {
snr: Float? = null,
viaMqtt: Boolean = false,
lastHeardIsRelative: Boolean = true,
+ isUnknownUser: Boolean = false,
): String = buildNodeDescription(
name = name,
isOnline = isOnline,
@@ -64,6 +66,7 @@ class BuildNodeDescriptionTest {
viaMqtt = viaMqtt,
strings = testStrings,
lastHeardIsRelative = lastHeardIsRelative,
+ isUnknownUser = isUnknownUser,
)
// ---- Basic output ----
@@ -92,6 +95,18 @@ class BuildNodeDescriptionTest {
assertFalse(result.contains("favorite"))
}
+ @Test
+ fun includes_incomplete_when_unknown_user() {
+ val result = describe(name = "Alpha", isUnknownUser = true)
+ assertTrue(result.startsWith("Alpha, incomplete"))
+ }
+
+ @Test
+ fun omits_incomplete_for_known_user() {
+ val result = describe(isUnknownUser = false)
+ assertFalse(result.contains("incomplete"))
+ }
+
// ---- Last heard ----
@Test

diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/NodeListItemPreviews.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/NodeListItemPreviews.kt
index f013557bf5..3b683e9dd4 100644
--- a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/NodeListItemPreviews.kt
+++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/NodeListItemPreviews.kt
@@ -100,10 +100,41 @@ fun NodeItemSignedPreview() {
}
}
+@PreviewLightDark
+@Composable
+fun NodeItemUnknownPreview() {
+ // A node heard before its NodeInfo arrived — placeholder identity, italic name, incomplete badge (design#16).
+ AppTheme {
+ Surface {
+ Column(modifier = Modifier.fillMaxWidth().padding(8.dp)) {
+ NodeItem(
+ thisNode = previewNodes.mickeyMouse,
+ thatNode = previewNodes.unknown,
+ distanceUnits = 0,
+ tempInFahrenheit = false,
+ connectionState = ConnectionState.Connected,
+ )
+ }
+ }
+ }
+}
+
// ---------------------------------------------------------------------------
// NodeItemCompact previews
// ---------------------------------------------------------------------------
+@PreviewLightDark
+@Composable
+fun NodeItemCompactUnknownPreview() {
+ AppTheme {
+ Surface {
+ Column(modifier = Modifier.fillMaxWidth().padding(8.dp)) {
+ NodeItemCompact(thisNode = previewNodes.mickeyMouse, thatNode = previewNodes.unknown, distanceUnits = 0)
+ }
+ }
+ }
+}
+
@PreviewLightDark
@Composable
fun NodeItemCompactAllFieldsPreview() {

diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/list/NodeListViewModel.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/list/NodeListViewModel.kt
index df37458931..5cb1c94ab4 100644
--- a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/list/NodeListViewModel.kt
+++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/list/NodeListViewModel.kt
@@ -231,20 +231,26 @@ data class NodesUiState(
data class NodeFilterState(
val filterText: String = "",
- val includeUnknown: Boolean = false,
+ val includeUnknown: Boolean = true,
val excludeInfrastructure: Boolean = false,
val onlyOnline: Boolean = false,
val onlyDirect: Boolean = false,
val showIgnored: Boolean = false,
val excludeMqtt: Boolean = false,
) {
- /** True if any user-applied filter is narrowing the visible node set. */
+ /** True if any user-applied filter is narrowing the visible node set. Unknown nodes are shown unless opted out. */
val isActive: Boolean
- get() = filterText.isNotEmpty() || excludeInfrastructure || onlyOnline || onlyDirect || excludeMqtt
+ get() =
+ !includeUnknown ||
+ filterText.isNotEmpty() ||
+ excludeInfrastructure ||
+ onlyOnline ||
+ onlyDirect ||
+ excludeMqtt
}
data class NodeFilterToggles(
- val includeUnknown: Boolean = false,
+ val includeUnknown: Boolean = true,
val excludeInfrastructure: Boolean = false,
val onlyOnline: Boolean = false,
val onlyDirect: Boolean = false,

diff --git a/feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/list/NodeListViewModelTest.kt b/feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/list/NodeListViewModelTest.kt
index eb9ff41a32..e4bcc4a615 100644
--- a/feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/list/NodeListViewModelTest.kt
+++ b/feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/list/NodeListViewModelTest.kt
@@ -117,6 +117,17 @@ class NodeListViewModelTest {
}
}
+ @Test
+ fun `isActive is false for the default filter`() {
+ assertEquals(false, NodeFilterState().isActive)
+ }
+
+ @Test
+ fun `isActive is true when unknown nodes are opted out`() {
+ // includeUnknown defaults to true, so a persisted false is a user-applied narrowing filter.
+ assertEquals(true, NodeFilterState(includeUnknown = false).isActive)
+ }
+
@Test
fun `connectionState reflects serviceRepository state`() = runTest {
val stateFlow = MutableStateFlow<ConnectionState>(ConnectionState.Disconnected)

diff --git a/screenshot-tests/src/screenshotTest/kotlin/org/meshtastic/screenshots/feature/NodeScreenshotTests.kt b/screenshot-tests/src/screenshotTest/kotlin/org/meshtastic/screenshots/feature/NodeScreenshotTests.kt
index 0bdad67e6f..64304a71aa 100644
--- a/screenshot-tests/src/screenshotTest/kotlin/org/meshtastic/screenshots/feature/NodeScreenshotTests.kt
+++ b/screenshot-tests/src/screenshotTest/kotlin/org/meshtastic/screenshots/feature/NodeScreenshotTests.kt
@@ -31,10 +31,12 @@ import org.meshtastic.feature.node.component.NodeItemCompactActivePreview
import org.meshtastic.feature.node.component.NodeItemCompactAllFieldsPreview
import org.meshtastic.feature.node.component.NodeItemCompactMinimalPreview
import org.meshtastic.feature.node.component.NodeItemCompactOnlineRemotePreview
+import org.meshtastic.feature.node.component.NodeItemCompactUnknownPreview
import org.meshtastic.feature.node.component.NodeItemCompleteActivePreview
import org.meshtastic.feature.node.component.NodeItemCompleteOnlineRemotePreview
import org.meshtastic.feature.node.component.NodeItemCompletePreview
import org.meshtastic.feature.node.component.NodeItemSignedPreview
+import org.meshtastic.feature.node.component.NodeItemUnknownPreview
import org.meshtastic.feature.node.component.PositionInlineContentPreview
import org.meshtastic.feature.node.component.PowerMetricsNoCurrentPreview
import org.meshtastic.feature.node.component.PowerMetricsPartialPreview
@@ -209,6 +211,20 @@ fun ScreenshotNodeItemSigned() {
NodeItemSignedPreview()
}
+@PreviewTest
+@PreviewLightDark
+@Composable
+fun ScreenshotNodeItemUnknown() {
+ NodeItemUnknownPreview()
+}
+
+@PreviewTest
+@PreviewLightDark
+@Composable
+fun ScreenshotNodeItemCompactUnknown() {
+ NodeItemCompactUnknownPreview()
+}
+
@PreviewTest
@PreviewLightDark
@Composable

diff --git a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotNodeItemCompactUnknown_Dark_d19fbf1f_0.png b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotNodeItemCompactUnknown_Dark_d19fbf1f_0.png
new file mode 100644
index 0000000000..b6be7ccb97
Binary files /dev/null and b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotNodeItemCompactUnknown_Dark_d19fbf1f_0.png differ

diff --git a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotNodeItemCompactUnknown_Light_b29dc7a7_0.png b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotNodeItemCompactUnknown_Light_b29dc7a7_0.png
new file mode 100644
index 0000000000..e90ed4397f
Binary files /dev/null and b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotNodeItemCompactUnknown_Light_b29dc7a7_0.png differ

diff --git a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotNodeItemUnknown_Dark_d19fbf1f_0.png b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotNodeItemUnknown_Dark_d19fbf1f_0.png
new file mode 100644
index 0000000000..c82a54ca2d
Binary files /dev/null and b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotNodeItemUnknown_Dark_d19fbf1f_0.png differ

diff --git a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotNodeItemUnknown_Light_b29dc7a7_0.png b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotNodeItemUnknown_Light_b29dc7a7_0.png
new file mode 100644
index 0000000000..0529564820
Binary files /dev/null and b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotNodeItemUnknown_Light_b29dc7a7_0.png differ

Served by rngit 1.5.0 - Generated in 0.27s